﻿using Dyao.Book.Contract;
using Foundation.IdCreate;

namespace Dyao.Book.Application
{
    public class BookIdCreateConfiguration : IIdCreateConfiguration
    {
        public void Configure(IdCreateBuilder createBuilder)
        {
            createBuilder.AddRedisGenerator(IdBusinessType.BookRedisId, builder =>
            {
                //使用策略
                builder.UsingStrategy(options => options.SetInitialValue(1) //初始值
                    .SetIncrement(2) // 自增步长
                    .UsingHiLo(10) // 使用HiLo 算法
                    .DaliyReset() //每日重置一次
                                  //.MonthlyReset() //每月重置一次
                                  //.YearlyReset() // 每年重置一次
                );

                builder.ConvertToString((id, now, parameters) => $"B{now:yyMMdd}{id.ToString("D5")}"); //自定义转换 string
            });

            createBuilder.AddRedisGenerator(IdBusinessType.BookSourceRedisId, builder =>
            {
                //使用策略
                builder.UsingStrategy(options => options.SetInitialValue(1) //初始值
                    .SetIncrement(2) // 自增步长
                    .UsingHiLo(10) // 使用HiLo 算法
                    .DaliyReset() //每日重置一次
                                  //.MonthlyReset() //每月重置一次
                                  //.YearlyReset() // 每年重置一次
                );

                builder.ConvertToString((id, now, parameters) => $"S{now:yyMMdd}{id.ToString("D5")}"); //自定义转换 string
            });

            createBuilder.AddRedisGenerator(IdBusinessType.BookChapterRedisId, builder =>
            {
                //使用策略
                builder.UsingStrategy(options => options.SetInitialValue(1) //初始值
                    .SetIncrement(2) // 自增步长
                    .UsingHiLo(10) // 使用HiLo 算法
                );

                builder.ConvertToString((id, now, parameters) => $"C{now:yyyy}{id.ToString("D8")}"); //自定义转换 string
            });

            createBuilder.AddRedisGenerator(IdBusinessType.BookChapterContentRedisId, builder =>
            {
                //使用策略
                builder.UsingStrategy(options => options.SetInitialValue(1) //初始值
                    .SetIncrement(2) // 自增步长
                    .UsingHiLo(10) // 使用HiLo 算法
                );

                builder.ConvertToString((id, now, parameters) => $"CC{now:yyyy}{id.ToString("D8")}"); //自定义转换 string
            });

            createBuilder.AddGuidGenerator(IdBusinessType.OperationLogGuidId, builder =>
            {
                builder.AsSequentialGuid(); //生成有序的Guid

                //guid 转成 string 配置选项
                builder.ConvertToGuidString(options =>
                    options.ToUpper() //转成大写
                        .NotSeparator() //去掉“-”分隔符
                    );
            });
        }
    }
}
